home *** CD-ROM | disk | FTP | other *** search
- {
- JON JASIUNAS
-
- >Is it possible to store variables in actual .EXE file of a TP program, inste
- >of making an external config file for it? Thanks.
-
- Sure. Make them typed constants, then modify the .EXE whenever you want
- to store a change.
- }
-
- type
- tOwnerName = string[30];
- tRegCode = String[12];
-
- const
- OwnerName : tOwnerName = '';
- RegCode : tRegCode = '';
-
- begin
- WriteLn('The current owner is : ', OwnerName);
- WriteLn('The current registration code is : ', RegCode);
- WriteLn;
-
- Write('Enter the new owner name: ');
- ReadLn(OwnerName);
- Write('Enter the new registration code: ');
- ReadLn(RegCode);
-
- If Write2Exe(OwnerName, SizeOf(OwnerName)) <> 0 then
- WriteLn('Owner name not updated!');
-
- If Write2Exe(RegCode, SizeOf(RegCode)) <> 0 then
- WriteLn('Registration code not updated!');
- end.
-
- { Here's my self mod unit: }
-
- {*****************************
- * EXEMOD.PAS v1.0 *
- * *
- * General purose .EXE *
- * self-modifying routines *
- *****************************
-
- 1992-93 HyperDrive Software
- Released into the public domain.}
-
- {$S-,R-,D-,I-}
- {$IFOPT O+}
- {$F+}
- {$ENDIF}
-
- unit ExeMod;
-
- interface
-
- var
- ExeName : String;
-
- function Write2Exe(var Data2Write; DataSize : Word) : Integer;
-
- implementation
-
- function Write2Exe(var Data2Write; DataSize : Word): Integer;
- const
- PrefixSize = 256;
- var
- ExeFile : File;
- HeaderSize : Word;
- IoError : Integer;
- begin
- Assign(ExeFile, ExeName);
- Reset(ExeFile, 1);
- IoError := IOResult;
-
- If IoError = 0 then
- {-Seek position of header size in EXE File }
- begin
- Seek(ExeFile, 8);
- IoError := IOResult;
- end; { If }
-
- If IoError = 0 then
- {-Read header size in EXE File }
- begin
- BlockRead(ExeFile, HeaderSize, Sizeof(HeaderSize));
- IoError := IOResult;
- end;
-
- If IoError = 0 then
- {-Seek position of Data in EXE File }
- begin
- Seek(ExeFile, LongInt(16) * (HeaderSize + Seg(Data2Write) - PrefixSeg) +
- IoError := IOResult;
- end;
-
- If IoError = 0 then
- {-Write new Data to EXE File }
- begin
- BlockWrite(ExeFile, Data2Write, DataSize);
- IoError := IOResult;
- end;
-
- Close(ExeFile);
- Write2Exe := IoError;
- end;
-
- begin
- ExeName := ParamStr(0);
- end.
-